TerraformレジストリでPre-written Sentinel policy Set for AWSが公開されました
Pre-written Sentinel policy Set for AWSが発表されました。
Sentinelとは
Sentinelは、HashiCorpが開発したポリシー実行フレームワークです。主にインフラストラクチャの自動化における、ガバナンスとコンプライアンスの実施を目的としています。
Terraformで使う場合は、SentinelはPlan結果に対してポリシーチェックを行います。
Plan結果のため、コードが実行された状態です。静的解析よりも踏み込んだチェックが可能です。
ポリシーの例)
- 「ManagedBy = terraform」タグがついているか
- デプロイが金曜日に行われていないか
Pre-written Sentinel policy Set for AWSとは
AWSとHashiCorpが共同開発している、Sentinel Policy Setです。(2024/12時点ではパブリックベータ)
Terraformレジストリで公開されています。
「Pre-written Sentinel Policies」がPrefixについているものです。
TerraformのModuleやProviderと同様にSentinelポリシーもTerraformレジストリで公開することができます。
「Pre-written Sentinel Policies」は管理主体がAWSとHashiCorpである点が特徴と言えます。
Sentinelは強力なツールですが、ポリシーを書くには学習コストが必要です。
ユーザーが独自にポリシーを書かなくても、Pre-written Sentinel policy Set for AWSを使うことでガバナンスを効かせることができる点が嬉しいです。
ポリシーの内容
CISに準拠したポリシーが提供されています。
Security HubのCISのセキュリティ基準相当のポリシーと思っていただければよいかと思います。
現時点で対応しているサービスは以下です。
- EC2
- KMS
- Cloudtrail
- S3
- IAM
- VPC
- RDS
- EFS
ポリシーの例としては、以下です。
- VPCフローログが有効になっているか
- S3バケットのブロックパブリックアクセスが有効になっているか
- IAMパスワードの有効期限は90日以内か
ポリシーの内容は各Policy libraryやGitHub上で確認できます。
- hashicorp/CIS-Policy-Set-for-AWS-VPC-Terraform | Terraform Registry
- hashicorp/CIS-Policy-Set-for-AWS-RDS-Terraform | Terraform Registry
- hashicorp/CIS-Policy-Set-for-AWS-IAM-Terraform | Terraform Registry
やってみた
HCP TerraformでPre-written Sentinel policy Set for AWSを使って、Policy Setを作成し、Workspaceに適用してみます。
VPCに対して、ポリシーを適用しました。
HCP Terraformの設定もTerraformで行いました。
├── policy
│ └── sentinel.hcl
└── terraform
├── aws # VPC
│ ├── terraform.lock.hcl
│ └── main.tf
└── tfe # HCP Terraform(Workspace,Policy Set)
├── main.tf
├── terraform.lock.hcl
├── terraform.tfvars
└── variables.tf
実運用ではPolicyとTerraformコードでリポジトリを分けることも多いと思いますが、今回は単一リポジトリで行いました。
事前準備
事前に以下を準備した上で、試してみました。
- HCP TerraformのOrganizations作成
- 作成するWorkspaceの対象Projectは作成
- ProjectにVariables SetでAWS認証情報をセット
Policy用のファイルを用意する
まずはPolicy用のファイルを用意します。
今回はVPCのPre-written Sentinel policy Setを利用しました。
Policyの使い方は簡単です。
Terraform RegistryのPolicy LibrariesでPolicyを探します。
「Pre-written」等のワードでPolicyを絞り込みます。今回使いたいVPCのPolicyが見つかりました。
Policyを選択して、詳細に移動します。
Policyを選択すると、スニペットが表示されます。
コピーして、Sentinel用のファイルに貼ります。
これで、ポリシー用のファイルの用意は完了です。
WorkspaceとPolicy SetをHCP Terraformにデプロイ
HCP Terraformにリソースを作成していきます。
terraform/tfe
ディレクトリに移動します。
terraform.tfvarsを用意します。
cd terraform/tfe
cp terarform.tfvars.sample terraform.tfvars
vi terraform.tfvars # 環境に合わせた値に置き換え
以下は、WorkspaceとPolicy Setを作成するTerraformコードです。
VCS DrivenのWorkspaceを作成します。
Workspaceはaws
ディレクトリ配下のコードに対して、Terraformを実行します。
Terraformを実行して、リソースを作成します。
terraform plan
terraform apply
動作確認
VPCのPolicyでは、VPC Flow logが設定されていないと検知されます。
以下のようにVPC Flow Log無しで、AWSリソースを定義しました。
HCP Terraformで確認してみると、Policyで検知されていることが分かりました。
メッセージ通りVPC Flow Logを有効化して、再度Runしました。(コード中の「VPC Flow Log関連設定」以降のコメントアウトを解除)
ステータスがPassになることを確認できました。
おわりに
ポリシー実行フレームワークにSentinelかOPAどちらを使うか迷うケースが多いと思います。
「Pre-written Sentinel policy Set for AWS」の存在はSentinelを選定する理由の一つになると思います。
対応するPolicyの数が増えていくのが楽しみですね。
個人的には、FSBPベースのPre-witten Sentinel Policyもあったら嬉しいなと思いました。
以上、AWS事業本部の佐藤(@chari7311)でした。